
/**
 * 环境检测工具函数
 * 判断当前是否为微信小程序环境
 */
export const isMiniProgram = () => {
  // 微信小程序环境判断
  if (typeof wx !== 'undefined' && wx.getSystemInfoSync) {
    try {
      const res = wx.getSystemInfoSync();
      return res.environment === 'miniprogram';
    } catch (e) {
      return false;
    }
  }
  return false;
};

/**
 * 滚动到指定元素
 * @param {string} selector - 元素选择器（如 '#target'）
 * @param {boolean} animated - 是否启用动画
 * @param {number} offset - 偏移量
 */
export const scrollToElement = (selector, animated = true, offset = 0) => {
  if (typeof uni !== 'undefined') {
    // uni-app 环境（包括微信小程序和H5）
    const query = uni.createSelectorQuery().in(getCurrentInstance());
    
    query.select(selector).boundingClientRect();
    
    // 获取滚动容器的位置信息
    query.select('.tree-scroll-container').boundingClientRect();
    query.select('.tree-scroll-container').scrollOffset();
    
    query.exec((res) => {
      if (res && res[0] && res[1] && res[2]) {
        const elementRect = res[0]; // 目标元素位置
        const containerRect = res[1]; // 滚动容器位置
        const containerScroll = res[2]; // 滚动容器的滚动信息
        
        // 计算滚动目标位置，使元素居中显示
        const targetScrollTop = containerScroll.scrollTop + 
                              elementRect.top - 
                              containerRect.top - 
                              (containerRect.height / 2 - elementRect.height / 2) - 
                              offset;
        
        const targetScrollLeft = containerScroll.scrollLeft + 
                               elementRect.left - 
                               containerRect.left - 
                               (containerRect.width / 2 - elementRect.width / 2) - 
                               offset;
        
        // 获取滚动容器元素
        const scrollView = document.querySelector('.tree-scroll-container') || {};
        
        if (isMiniProgram()) {
          // 微信小程序环境，使用uni.pageScrollTo
          uni.pageScrollTo({
            scrollTop: Math.max(0, targetScrollTop),
            scrollLeft: Math.max(0, targetScrollLeft),
            duration: animated ? 300 : 0
          });
        } else if (scrollView.scrollTo) {
          // H5环境，使用scrollView的scrollTo方法
          scrollView.scrollTo({
            top: Math.max(0, targetScrollTop),
            left: Math.max(0, targetScrollLeft),
            behavior: animated ? 'smooth' : 'auto'
          });
        } else {
          // 降级方案
          scrollView.scrollTop = Math.max(0, targetScrollTop);
          scrollView.scrollLeft = Math.max(0, targetScrollLeft);
        }
      }
    });
  } else if (typeof document !== 'undefined') {
    // 纯H5环境
    const element = document.querySelector(selector);
    const scrollView = document.querySelector('.tree-scroll-container');
    
    if (element && scrollView) {
      const elementRect = element.getBoundingClientRect();
      const containerRect = scrollView.getBoundingClientRect();
      
      // 计算滚动目标位置，使元素居中显示
      const targetScrollTop = scrollView.scrollTop + 
                            elementRect.top - 
                            containerRect.top - 
                            (containerRect.height / 2 - elementRect.height / 2) - 
                            offset;
      
      const targetScrollLeft = scrollView.scrollLeft + 
                             elementRect.left - 
                             containerRect.left - 
                             (containerRect.width / 2 - elementRect.width / 2) - 
                             offset;
      
      if (animated) {
        // 平滑滚动
        scrollView.scrollTo({
          top: Math.max(0, targetScrollTop),
          left: Math.max(0, targetScrollLeft),
          behavior: 'smooth'
        });
      } else {
        // 直接跳转
        scrollView.scrollTop = Math.max(0, targetScrollTop);
        scrollView.scrollLeft = Math.max(0, targetScrollLeft);
      }
    }
  }
};

/**
 * 滚动到顶部
 * @param {boolean} animated - 是否启用动画
 */
export const scrollToTop = (animated = true) => {
  if (typeof uni !== 'undefined') {
    // uni-app 环境
    uni.pageScrollTo({
      scrollTop: 0,
      duration: animated ? 300 : 0
    });
  } else if (typeof window !== 'undefined') {
    // 纯H5环境
    if (animated) {
      window.scrollTo({
        top: 0,
        behavior: 'smooth'
      });
    } else {
      window.scrollTo(0, 0);
    }
  }
};

/**
 * 获取当前实例（在uni-app中使用）
 */
function getCurrentInstance() {
  // 尝试获取当前Vue实例
  // 在不同版本的uni-app中，获取实例的方式可能不同
  try {
    // 兼容Vue 3的getCurrentInstance
    if (typeof __VUE_HMR_RUNTIME__ !== 'undefined' && __VUE_HMR_RUNTIME__.getCurrentInstance) {
      return __VUE_HMR_RUNTIME__.getCurrentInstance();
    }
    return null;
  } catch (e) {
    return null;
  }
}